#if !defined(_APP_BUFFER_H)
#define _APP_BUFFER_H

#include <pthread.h>

//小缓冲区
typedef struct{
    //内存指针
    unsigned char *ptr;  
    //总大小
    int total_size;
    //数据长度
    int len;
}SubBuffer;

//缓冲区
typedef struct{
    //包含两个子缓冲区指针数组
    SubBuffer *sub_buffers[2];
    // 读的索引
    int read_index;
    // 写的索引
    int write_index;
    //读锁 写锁
    pthread_mutex_t r_lock;
    pthread_mutex_t w_lock;
}Buffer;

Buffer *app_buffer_init(int size);

void app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓冲区写入数据
 * @param buffer 缓冲区指针
 * @param data 要写入的数据
 * @param data_len 要写入数据长度
 * @return 成功0 失败-1
 */
int app_buffer_write(Buffer *buffer, char *data, int data_len);

/**
 * @brief 从缓冲区读取数据
 * @param buffer 缓冲区指针
 * @param data_buf 读取数据的缓存容器   
 * @param buf_size 读取数据缓存容器的大小
 * @return 成功读到数据的长度 失败-1
 */
int app_buffer_read(Buffer *buffer, char *data_buf, int buf_size);

#endif // _APP_BUFFER_H
